package ottawa.testing.junit;

import java.util.List;
import junit.framework.TestCase;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Before;
import org.junit.Test;
import ottawa.testing.bean.Localidad;
import ottawa.testing.bean.Provincia;
import ottawa.testing.dao.LocalidadDAOHibernate;
import ottawa.testing.session.hibernate.InitSessionFactoryHibernate;


public class LocalidadDAOHibernateTest 
	extends TestCase
{

	private Session session                          = null;
	private Transaction transaction                  = null;
	private Localidad localidad                      = null;
	private Provincia provincia                      = null;
	private LocalidadDAOHibernate serviciosLocalidad = null;
	
	@Before
	public void setUp()
	{
		session = InitSessionFactoryHibernate.getInstance().getCurrentSession();
		
		if ( session!= null && !session.isOpen() )
			return;
		
		provincia = new Provincia();
			provincia.setIdProvincia(1);
		localidad = new Localidad();	
			localidad.setNombreLocalidad("Alameda");
			localidad.setProvincia(provincia);
	}
	
	@Test
	public void testSalvarLocalidad()
	{
		System.out.println("--- INICIO LISTADO DE LOCALIDADES ---");

		if ( session!= null && !session.isOpen() )
			return;
		
		transaction                        = session.beginTransaction();
		serviciosLocalidad                 = new LocalidadDAOHibernate(session);
		
			try
			{
				serviciosLocalidad.salvarLocalidad(localidad);
			}
			catch ( HibernateException ex )
			{
				if ( transaction != null && transaction.isActive() )
					transaction.rollback();
				
				ex.printStackTrace();
			}
		
		transaction.commit();
		
		System.out.println("--- FINAL LISTADO DE LOCALIDADES ---");		
	}
	
	@Test(expected= HibernateException.class)
	public void testListarLocalidad()
	{
		System.out.println("--- INICIO LISTADO DE LOCALIDADES ---");

		if ( session!= null && !session.isOpen() )
			return;
		
		transaction                        = session.beginTransaction();
		serviciosLocalidad                 = new LocalidadDAOHibernate(session);
		List<Localidad> listadoLocalidades = null;
		
			try
			{
				listadoLocalidades = serviciosLocalidad.listarLocalidad();
			}
			catch ( HibernateException ex )
			{
				if ( transaction != null && transaction.isActive() )
					transaction.rollback();
				
				ex.printStackTrace();
			}
		
			if ( listadoLocalidades != null )
			{
				int totalLocalidades = listadoLocalidades.size();
				
					if ( totalLocalidades > 0 )
					{
						for ( int i = 0; i < totalLocalidades; i++ )
						{
							localidad = listadoLocalidades.get(i);
								System.out.println("ID LOCALIDAD: " + localidad.getIdLocalidad());
								System.out.println("NOMBRE LOCALIDAD: " + localidad.getNombreLocalidad());
								System.out.println("ID PROVINCIA: " + localidad.getProvincia().getIdProvincia());
								System.out.println("NOMBRE PROVINCIA: " + localidad.getProvincia().getNombreProvincia());
						}
					}
					else
					{
						System.out.println("Actualmente, no existe ninguna localidad");
					}
			}
			
		transaction.commit();
		
		System.out.println("--- FINAL LISTADO DE LOCALIDADES ---");		
	}
	
}
